{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model: Naive Bayes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Importing Libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import _pickle as pickle\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import precision_score, recall_score, accuracy_score, f1_score, confusion_matrix, classification_report\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Loading in Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_excel('../top10_corr_features.xlsx')\n",
    "df = df.drop(df.columns[0], axis = 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Scaling the Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "scaler = StandardScaler()\n",
    "\n",
    "features_df = df.drop([\"Decision\"], 1)\n",
    "\n",
    "scaled_df = pd.DataFrame(scaler.fit_transform(features_df), \n",
    "                               index=features_df.index, \n",
    "                               columns=features_df.columns)\n",
    "\n",
    "df = scaled_df.join(df.Decision)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Splitting the Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = df.drop([\"Decision\"], 1)\n",
    "y = df.Decision\n",
    "\n",
    "# Train, test, split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Helper Functions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Function for plotting confusion matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_confusion_matrix(y_true, y_pred, labels=[\"Sell\", \"Buy\", \"Hold\"], \n",
    "                          normalize=False, title=None, cmap=plt.cm.coolwarm):\n",
    "\n",
    "    cm = confusion_matrix(y_true, y_pred)\n",
    "    fig, ax = plt.subplots(figsize=(12,6))\n",
    "    im = ax.imshow(cm, interpolation='nearest', cmap=cmap)\n",
    "    ax.figure.colorbar(im, ax=ax)\n",
    "    # We want to show all ticks...\n",
    "    ax.set(xticks=np.arange(cm.shape[1]),\n",
    "           yticks=np.arange(cm.shape[0]),\n",
    "           # ... and label them with the respective list entries\n",
    "           xticklabels=labels, yticklabels=labels,\n",
    "           title=title,\n",
    "           ylabel='ACTUAL',\n",
    "           xlabel='PREDICTED')\n",
    "    # Rotate the tick labels and set their alignment.\n",
    "    plt.setp(ax.get_xticklabels(), rotation=45, ha=\"right\",\n",
    "             rotation_mode=\"anchor\")\n",
    "    # Loop over data dimensions and create text annotations.\n",
    "    fmt = '.2f' if normalize else 'd'\n",
    "    thresh = cm.max() / 1.5\n",
    "    for i in range(cm.shape[0]):\n",
    "        for j in range(cm.shape[1]):\n",
    "            ax.text(j, i, format(cm[i, j], fmt),\n",
    "                    ha=\"center\", va=\"center\",\n",
    "                    color=\"snow\" if cm[i, j] > thresh else \"orange\",\n",
    "                    size=26)\n",
    "    ax.grid(False)\n",
    "    fig.tight_layout()\n",
    "    return ax"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Modeling\n",
    "The preferred evaluation metric used will be __Precision__ for each class.  They will be optimized using the __F1 Score-Macro-Average__ to balance the Precision and Recall.  This is done because we want to not only be correct when predicting but also make a decent amount of predictions for each class.  Classes such as 'Buy' and 'Sell' are more important than 'Hold'."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Fitting and Training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GaussianNB(priors=None, var_smoothing=1e-09)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Importing the model\n",
    "from sklearn.naive_bayes import GaussianNB\n",
    "\n",
    "# Fitting and training\n",
    "clf = GaussianNB()\n",
    "clf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Printing out Evaluation Metrics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "        Sell       0.00      0.00      0.00         8\n",
      "         Buy       0.38      0.50      0.43         6\n",
      "        Hold       0.11      0.33      0.17         3\n",
      "\n",
      "    accuracy                           0.24        17\n",
      "   macro avg       0.16      0.28      0.20        17\n",
      "weighted avg       0.15      0.24      0.18        17\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    }
   ],
   "source": [
    "# Classifier predictions\n",
    "pred = clf.predict(X_test)\n",
    "\n",
    "#Printing out results\n",
    "report = classification_report(y_test, pred, target_names=['Sell', 'Buy', 'Hold'])\n",
    "print(report)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Confusion Matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_confusion_matrix(y_test, pred, title=\"Confusion Matrix\")\n",
    "np.set_printoptions(precision=1)\n",
    "# Plot non-normalized confusion matrix\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Tuning Model Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import GridSearchCV"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Parameters to Tune\n",
    "params = {'var_smoothing': [1.5**-i for i in range(-20,20, 2)]}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 20 candidates, totalling 60 fits\n",
      "[CV] var_smoothing=3325.256730079651 .................................\n",
      "[CV]  var_smoothing=3325.256730079651, score=(train=0.204, test=0.202), total=   0.0s\n",
      "[CV] var_smoothing=3325.256730079651 .................................\n",
      "[CV]  var_smoothing=3325.256730079651, score=(train=0.201, test=0.208), total=   0.0s\n",
      "[CV] var_smoothing=3325.256730079651 .................................\n",
      "[CV]  var_smoothing=3325.256730079651, score=(train=0.205, test=0.200), total=   0.0s\n",
      "[CV] var_smoothing=1477.8918800354004 ................................\n",
      "[CV]  var_smoothing=1477.8918800354004, score=(train=0.204, test=0.202), total=   0.0s\n",
      "[CV] var_smoothing=1477.8918800354004 ................................\n",
      "[CV]  var_smoothing=1477.8918800354004, score=(train=0.201, test=0.208), total=   0.0s\n",
      "[CV] var_smoothing=1477.8918800354004 ................................\n",
      "[CV]  var_smoothing=1477.8918800354004, score=(train=0.205, test=0.200), total=   0.0s\n",
      "[CV] var_smoothing=656.8408355712891 .................................\n",
      "[CV]  var_smoothing=656.8408355712891, score=(train=0.204, test=0.202), total=   0.0s\n",
      "[CV] var_smoothing=656.8408355712891 .................................\n",
      "[CV]  var_smoothing=656.8408355712891, score=(train=0.201, test=0.208), total=   0.0s\n",
      "[CV] var_smoothing=656.8408355712891 .................................\n",
      "[CV]  var_smoothing=656.8408355712891, score=(train=0.205, test=0.200), total=   0.0s\n",
      "[CV] var_smoothing=291.92926025390625 ................................\n",
      "[CV]  var_smoothing=291.92926025390625, score=(train=0.204, test=0.202), total=   0.0s\n",
      "[CV] var_smoothing=291.92926025390625 ................................\n",
      "[CV]  var_smoothing=291.92926025390625, score=(train=0.201, test=0.208), total=   0.0s\n",
      "[CV] var_smoothing=291.92926025390625 ................................\n",
      "[CV]  var_smoothing=291.92926025390625, score=(train=0.205, test=0.200), total=   0.0s"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.0s remaining:    0.0s\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "[Parallel(n_jobs=1)]: Done   2 out of   2 | elapsed:    0.0s remaining:    0.0s\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "[Parallel(n_jobs=1)]: Done   3 out of   3 | elapsed:    0.0s remaining:    0.0s\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "[Parallel(n_jobs=1)]: Done   4 out of   4 | elapsed:    0.0s remaining:    0.0s\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "[CV] var_smoothing=129.746337890625 ..................................\n",
      "[CV]  var_smoothing=129.746337890625, score=(train=0.204, test=0.202), total=   0.0s\n",
      "[CV] var_smoothing=129.746337890625 ..................................\n",
      "[CV]  var_smoothing=129.746337890625, score=(train=0.201, test=0.208), total=   0.0s\n",
      "[CV] var_smoothing=129.746337890625 ..................................\n",
      "[CV]  var_smoothing=129.746337890625, score=(train=0.205, test=0.200), total=   0.0s\n",
      "[CV] var_smoothing=57.6650390625 .....................................\n",
      "[CV]  var_smoothing=57.6650390625, score=(train=0.204, test=0.202), total=   0.0s\n",
      "[CV] var_smoothing=57.6650390625 .....................................\n",
      "[CV]  var_smoothing=57.6650390625, score=(train=0.201, test=0.208), total=   0.0s\n",
      "[CV] var_smoothing=57.6650390625 .....................................\n",
      "[CV]  var_smoothing=57.6650390625, score=(train=0.205, test=0.200), total=   0.0s\n",
      "[CV] var_smoothing=25.62890625 .......................................\n",
      "[CV]  var_smoothing=25.62890625, score=(train=0.243, test=0.202), total=   0.0s\n",
      "[CV] var_smoothing=25.62890625 .......................................\n",
      "[CV]  var_smoothing=25.62890625, score=(train=0.274, test=0.208), total=   0.0s\n",
      "[CV] var_smoothing=25.62890625 .......................................\n",
      "[CV]  var_smoothing=25.62890625, score=(train=0.243, test=0.200), total=   0.0s\n",
      "[CV] var_smoothing=11.390625 .........................................\n",
      "[CV]  var_smoothing=11.390625, score=(train=0.243, test=0.202), total=   0.0s\n",
      "[CV] var_smoothing=11.390625 .........................................\n",
      "[CV]  var_smoothing=11.390625, score=(train=0.306, test=0.208), total=   0.0s\n",
      "[CV] var_smoothing=11.390625 .........................................\n",
      "[CV]  var_smoothing=11.390625, score=(train=0.310, test=0.200), total=   0.0s\n",
      "[CV] var_smoothing=5.0625 ............................................\n",
      "[CV]  var_smoothing=5.0625, score=(train=0.278, test=0.202), total=   0.0s\n",
      "[CV] var_smoothing=5.0625 ............................................\n",
      "[CV]  var_smoothing=5.0625, score=(train=0.306, test=0.208), total=   0.0s\n",
      "[CV] var_smoothing=5.0625 ............................................\n",
      "[CV]  var_smoothing=5.0625, score=(train=0.310, test=0.200), total=   0.0s\n",
      "[CV] var_smoothing=2.25 ..............................................\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[CV]  var_smoothing=2.25, score=(train=0.409, test=0.260), total=   0.0s\n",
      "[CV] var_smoothing=2.25 ..............................................\n",
      "[CV]  var_smoothing=2.25, score=(train=0.294, test=0.215), total=   0.0s\n",
      "[CV] var_smoothing=2.25 ..............................................\n",
      "[CV]  var_smoothing=2.25, score=(train=0.410, test=0.200), total=   0.0s\n",
      "[CV] var_smoothing=1.0 ...............................................\n",
      "[CV]  var_smoothing=1.0, score=(train=0.397, test=0.260), total=   0.0s\n",
      "[CV] var_smoothing=1.0 ...............................................\n",
      "[CV]  var_smoothing=1.0, score=(train=0.405, test=0.159), total=   0.0s\n",
      "[CV] var_smoothing=1.0 ...............................................\n",
      "[CV]  var_smoothing=1.0, score=(train=0.410, test=0.200), total=   0.0s\n",
      "[CV] var_smoothing=0.4444444444444444 ................................\n",
      "[CV]  var_smoothing=0.4444444444444444, score=(train=0.426, test=0.321), total=   0.0s\n",
      "[CV] var_smoothing=0.4444444444444444 ................................\n",
      "[CV]  var_smoothing=0.4444444444444444, score=(train=0.411, test=0.159), total=   0.0s\n",
      "[CV] var_smoothing=0.4444444444444444 ................................\n",
      "[CV]  var_smoothing=0.4444444444444444, score=(train=0.514, test=0.422), total=   0.0s\n",
      "[CV] var_smoothing=0.19753086419753085 ...............................\n",
      "[CV]  var_smoothing=0.19753086419753085, score=(train=0.426, test=0.238), total=   0.0s\n",
      "[CV] var_smoothing=0.19753086419753085 ...............................\n",
      "[CV]  var_smoothing=0.19753086419753085, score=(train=0.411, test=0.156), total=   0.0s\n",
      "[CV] var_smoothing=0.19753086419753085 ...............................\n",
      "[CV]  var_smoothing=0.19753086419753085, score=(train=0.455, test=0.292), total=   0.0s\n",
      "[CV] var_smoothing=0.0877914951989026 ................................\n",
      "[CV]  var_smoothing=0.0877914951989026, score=(train=0.426, test=0.238), total=   0.0s\n",
      "[CV] var_smoothing=0.0877914951989026 ................................\n",
      "[CV]  var_smoothing=0.0877914951989026, score=(train=0.410, test=0.154), total=   0.0s\n",
      "[CV] var_smoothing=0.0877914951989026 ................................\n",
      "[CV]  var_smoothing=0.0877914951989026, score=(train=0.398, test=0.315), total=   0.0s\n",
      "[CV] var_smoothing=0.03901844231062338 ...............................\n",
      "[CV]  var_smoothing=0.03901844231062338, score=(train=0.457, test=0.238), total=   0.0s\n",
      "[CV] var_smoothing=0.03901844231062338 ...............................\n",
      "[CV]  var_smoothing=0.03901844231062338, score=(train=0.480, test=0.157), total=   0.0s\n",
      "[CV] var_smoothing=0.03901844231062338 ...............................\n",
      "[CV]  var_smoothing=0.03901844231062338, score=(train=0.447, test=0.257), total=   0.0s\n",
      "[CV] var_smoothing=0.017341529915832612 ..............................\n",
      "[CV]  var_smoothing=0.017341529915832612, score=(train=0.463, test=0.323), total=   0.0s\n",
      "[CV] var_smoothing=0.017341529915832612 ..............................\n",
      "[CV]  var_smoothing=0.017341529915832612, score=(train=0.502, test=0.116), total=   0.0s\n",
      "[CV] var_smoothing=0.017341529915832612 ..............................\n",
      "[CV]  var_smoothing=0.017341529915832612, score=(train=0.553, test=0.257), total=   0.0s"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "[CV] var_smoothing=0.0077073466292589396 .............................\n",
      "[CV]  var_smoothing=0.0077073466292589396, score=(train=0.434, test=0.323), total=   0.0s\n",
      "[CV] var_smoothing=0.0077073466292589396 .............................\n",
      "[CV]  var_smoothing=0.0077073466292589396, score=(train=0.526, test=0.116), total=   0.0s\n",
      "[CV] var_smoothing=0.0077073466292589396 .............................\n",
      "[CV]  var_smoothing=0.0077073466292589396, score=(train=0.588, test=0.257), total=   0.0s\n",
      "[CV] var_smoothing=0.0034254873907817508 .............................\n",
      "[CV]  var_smoothing=0.0034254873907817508, score=(train=0.413, test=0.323), total=   0.0s\n",
      "[CV] var_smoothing=0.0034254873907817508 .............................\n",
      "[CV]  var_smoothing=0.0034254873907817508, score=(train=0.526, test=0.116), total=   0.0s\n",
      "[CV] var_smoothing=0.0034254873907817508 .............................\n",
      "[CV]  var_smoothing=0.0034254873907817508, score=(train=0.588, test=0.258), total=   0.0s\n",
      "[CV] var_smoothing=0.0015224388403474447 .............................\n",
      "[CV]  var_smoothing=0.0015224388403474447, score=(train=0.413, test=0.323), total=   0.0s\n",
      "[CV] var_smoothing=0.0015224388403474447 .............................\n",
      "[CV]  var_smoothing=0.0015224388403474447, score=(train=0.526, test=0.116), total=   0.0s\n",
      "[CV] var_smoothing=0.0015224388403474447 .............................\n",
      "[CV]  var_smoothing=0.0015224388403474447, score=(train=0.562, test=0.225), total=   0.0s\n",
      "[CV] var_smoothing=0.0006766394845988643 .............................\n",
      "[CV]  var_smoothing=0.0006766394845988643, score=(train=0.434, test=0.292), total=   0.0s\n",
      "[CV] var_smoothing=0.0006766394845988643 .............................\n",
      "[CV]  var_smoothing=0.0006766394845988643, score=(train=0.569, test=0.116), total=   0.0s\n",
      "[CV] var_smoothing=0.0006766394845988643 .............................\n",
      "[CV]  var_smoothing=0.0006766394845988643, score=(train=0.579, test=0.262), total=   0.0s\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  60 out of  60 | elapsed:    0.7s finished\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:813: DeprecationWarning: The default of the `iid` parameter will change from True to False in version 0.22 and will be removed in 0.24. This will change numeric results when test-set sizes are unequal.\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=3, error_score='raise-deprecating',\n",
       "             estimator=GaussianNB(priors=None, var_smoothing=1e-09), iid='warn',\n",
       "             n_jobs=None,\n",
       "             param_grid={'var_smoothing': [3325.256730079651,\n",
       "                                           1477.8918800354004,\n",
       "                                           656.8408355712891,\n",
       "                                           291.92926025390625, 129.746337890625,\n",
       "                                           57.6650390625, 25.62890625,\n",
       "                                           11.390625, 5.0625, 2.25, 1.0,\n",
       "                                           0.4444444444444444,\n",
       "                                           0.19753086419753085,\n",
       "                                           0.0877914951989026,\n",
       "                                           0.03901844231062338,\n",
       "                                           0.017341529915832612,\n",
       "                                           0.0077073466292589396,\n",
       "                                           0.0034254873907817508,\n",
       "                                           0.0015224388403474447,\n",
       "                                           0.0006766394845988643]},\n",
       "             pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n",
       "             scoring='f1_macro', verbose=5)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "search = GridSearchCV(clf, params, cv=3, return_train_score=True, verbose=5, scoring='f1_macro')\n",
    "\n",
    "search.fit(X,y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Tuned Results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean Training Score: 0.35730132921105373\n",
      "Mean Testing Score: 0.4457251369016075\n",
      "\n",
      "Best Parameter Found:\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'var_smoothing': 0.4444444444444444}"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Mean Training Score:\", np.mean(search.cv_results_['mean_train_score']))\n",
    "print(\"Mean Testing Score:\", search.score(X, y))\n",
    "print(\"\\nBest Parameter Found:\")\n",
    "search.best_params_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Model with the Best Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GaussianNB(priors=None, var_smoothing=0.4444444444444444)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "search_clf = search.best_estimator_\n",
    "\n",
    "search_clf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Results from Optimum Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "        Sell       0.00      0.00      0.00         8\n",
      "         Buy       0.35      1.00      0.52         6\n",
      "        Hold       0.00      0.00      0.00         3\n",
      "\n",
      "    accuracy                           0.35        17\n",
      "   macro avg       0.12      0.33      0.17        17\n",
      "weighted avg       0.12      0.35      0.18        17\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    }
   ],
   "source": [
    "# Classifier predictions\n",
    "s_pred = search_clf.predict(X_test)\n",
    "\n",
    "#Printing out results\n",
    "report = classification_report(y_test, s_pred, target_names=['Sell', 'Buy', 'Hold'])\n",
    "print(report)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Confusion Matrix for Optimum Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeEAAAGoCAYAAABxHV2qAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3dd5xcdb3/8ddne0nPplcSSDRAaCGSJtJBAbnABZSuXCwIKvrjWoPg9dqVK3C9xkIXsaGAgKCAQILBACGSQgiRkLJANpVk+87n98c5Gyab3dk2O+fMzPv5eJwHM2e+c+ZDJt985lvO92vujoiIiGReQdQBiIiI5CslYRERkYgoCYuIiERESVhERCQiSsIiIiIRURIWERGJiJKwSAfMrNzM7jezHWb2m15c53wzeySdsUXBzB4ys4ujjkMklygJS9Yzsw+b2RIz22Vm1WGymJuGS58NjACGuvu/9/Qi7n6Xu5+Yhnj2YmbvMzM3s9+3OX9IeP6JLl7na2Z2Z2fl3P0Ud7+th+GKSDuUhCWrmdnVwA3AfxMkzPHA/wIfTMPlJwCr3b05DdfqK5uB2WY2NOncxcDqdH2ABfRvhUgfUMWSrGVmA4HrgSvc/ffuvtvdm9z9fnf/f2GZUjO7wcw2hccNZlYavvY+M9tgZp8zs7fCVvSl4WvXAfOBc8MW9kfbthjNbGLY4iwKn19iZmvN7G0z+5eZnZ90/umk9802s3+E3dz/MLPZSa89YWZfN7OF4XUeMbOqFH8MjcAfgPPC9xcC5wB3tfmz+h8zW29mO83sOTObF54/GfhS0v/ni0lxfMPMFgK1wKTw3GXh6z82s98mXf/bZvZXM7Muf4EioiQsWW0WUAbcm6LMl4GjgEOBQ4CZwFeSXh8JDATGAB8Fbjazwe5+LUHr+h537+fuP08ViJlVAj8CTnH3/sBsYGk75YYAfwrLDgV+APypTUv2w8ClwHCgBPh8qs8GbgcuCh+fBCwHNrUp8w+CP4MhwC+B35hZmbs/3Ob/85Ck91wIXA70B9a1ud7ngOnhD4x5BH92F7vWwRXpFiVhyWZDgZpOuovPB65397fcfTNwHUFyadUUvt7k7g8Cu4CpPYwnARxkZuXuXu3uy9sp8wHgFXe/w92b3f1uYBVwWlKZW9x9tbvXAb8mSJ4dcvdFwBAzm0qQjG9vp8yd7r4l/MzvA6V0/v95q7svD9/T1OZ6tcAFBD8i7gSudPcNnVxPRNpQEpZstgWoau0O7sBo9m7FrQvP7blGmyReC/TrbiDuvhs4F/g4UG1mfzKzd3UhntaYxiQ9f6MH8dwBfAo4hnZ6BsIu95VhF/h2gtZ/qm5ugPWpXnT3Z4G1gBH8WBCRblISlmz2DFAPnJGizCaCCVatxrNvV21X7QYqkp6PTH7R3f/s7icAowhatz/tQjytMW3sYUyt7gA+CTwYtlL3CLuL/5NgrHiwuw8CdhAkT4COupBTdi2b2RUELepNwDU9D10kfykJS9Zy9x0Ek6duNrMzzKzCzIrN7BQz+05Y7G7gK2Y2LJzgNJ+g+7QnlgLvNbPx4aSwL7a+YGYjzOz0cGy4gaBbu6WdazwITAlvqyoys3OBacADPYwJAHf/F3A0wRh4W/2BZoKZ1EVmNh8YkPT6m8DE7syANrMpwH8RdElfCFxjZim7zUVkX0rCktXc/QfA1QSTrTYTdKF+imDGMASJYgmwDPgn8Hx4rief9ShwT3it59g7cRYQTFbaBGwlSIifbOcaW4BTw7JbCFqQp7p7TU9ianPtp929vVb+n4GHCG5bWkfQe5Dc1dy6EMkWM3u+s88Ju//vBL7t7i+6+ysEM6zvaJ15LiJdY5rMKCIiEg21hEVERCKiJCwiIpImZvZZM1tuZi+Z2d1mVpaqvJKwiIhIGpjZGOAqYIa7HwQUEq5m1xElYRERkfQpAsrDCYwVdHJLZKpFDrJOcclAL60Y2XlByRqjdrRd10KyXfXAtrdJSzZrqH2DpsYdsV8z/IiCSt/p7d012D1raFhOcIdBqwXuvgDA3Tea2feA14E64BF3T7mNaU4l4dKKkRwyb0HUYUgaffGhy6MOQdLsm6qjOeXFp7Kjju70Fm4o6v0PwFObV9e7+4z2XjOzwQQ7uO0HbCdYo/0Cd+9wbYKcSsIiIiLtMrDiNDTYU29sejzwr3CdesK9vmeTYoEgjQmLiIikx+vAUeHqfQYcB6xM9Qa1hEVEJOeZGQVFfTt07e6Lw322nydoM78ApBx/URIWEZHcZ2DFfd/5G+5Ffm1XyysJi4hI7jP6vCXcExoTFhERiYhawiIikvvSNTs6zZSERUQk52ViYlZPKAmLiEjui2lLWGPCIiIiEVFLWEREcl9MZ0crCYuISM4zwArjl4TVHS0iIhIRtYRFRCT3GRTEsCWsJCwiInnAsAIlYRERkcwzsML4jcDGLyIREZE8oZawiIjkPENjwiIiItEwNCYsIiISDYtlS1hjwiIiIhFRS1hERHKeWTxXzFISFhGRvGAF8ev8jV9EIiIieUItYRERyX2aHS0iIhKVeM6OVhIWEZGcZzFtCWtMWEREJCJqCYuISF6I4+xoJWEREcl9Me2OVhIWEZE8EM+JWfFrm4uIiOQJtYRFRCTnxXV2tJKwiIjkBU3MEhERiUJMW8Lx+1kgIiKSJ9QSFhGRPGCxbAkrCYuISF6IYxJWd7SIiEhE1BIWEZGcF9yi1PftTjObCtyTdGoSMN/db2ivvJKwiIjkhUysmOXuLwOHAphZIbARuLej8krCIiKS+yySiVnHAa+6+7qOCigJi4iIdF2VmS1Jer7A3Rd0UPY84O5UF1MSFhGRvJCmMeEad5/R6WeZlQCnA19MVU5JWEREcl4Ea0efAjzv7m+mKqQknEXmjXmKMw64jymD11BZvIuauioWV8/kV6vOYeOuMVGHJ91UPn40+11xPlXHzKJi4hgKSkto3LqDnf98mU2/eYgNd90HiUTUYUo3qI7GW4aT8IfopCsalISzhPOFmd/ltMkP7nV2TL9qzjzgj5w88RHmL7yWZ6qPiig+6a4Rpx3LYb/4FkX9KvY6XzayirKRVQw/YQ4TLvt3nv3gJ2javjOiKKXrVEflHWZWAZwAfKyzslqsIwtcNO2uPZX7r+uO4aKHfs4Hfv8H/vPJb7Bp10gqiuu4fs51jOu/PuJIpSvKJ4zh8Nu+Q1G/Chre3MKyK6/n8emn8sj497LwmAvY9LuHARg88xAOvml+xNFKV6iOZgPDCgp6fXSFu9e6+1B339FZWbWEY25w2VYunHYnAAs3HsX8RfOBoEvl6Y1zeHX7JG4/5VIqiuu4fPrP+OrC6yKMVrpi/EfOprC8DG9p4dmzrmDHcy/tea1x81a2/X0pVljIqDNOYNQZJ1A8dBBNW7ZHGLGkojqaJbSLkvTEKRMfoaK4HoAFyy6jtXK3qt49ivtfPRWAo8c+xeCyrZkOUbppwMFTAdi9Zt1eCTjZxrsfAMAKC6mcNC5jsUn3qY5KbygJx9ycMYsAeH3nWNZs37/dMo+vPxqAwoIEs0Ytzlhs0jOJhgYAPOEdlvGkCVmNm7f1eUzSc6qj2SJz3dHdoSQcc1MGvwLAii3v7rDMqq1TaU4EX+XUIaszEpf03I4XVgJQecAE+h80pd0yo886CYBdr7xG7bqNGYtNuk91NIuY9f5IMyXhGKsq30xFcR0Am3aN7rBcU6KELXVDAZgw4PWMxCY9t27Br2jYvJWCoiKO/N1NjD73/ZSOrKKgrJT+0/Zn+s1fY8x5p9JSW8c/r/o6eMctZomW6mj2aL1PuLdHumliVowNKn1nYt32hoEpy25rGMyIys0MKNHtLHHXtH0nz5x4CUfcfQP93zWJw2/9zl6ve0sL1X/8C6986yfsXLoyoiilK1RHpbcy2hI2sy+b2XIzW2ZmS83sPSnK3mpmZ4ePnzCzTpcJyzVlRfV7Hje2lKQs2xC+Xl5U16cxSXrsWrWWJedcxbbFS/d5zQoLKR8zgooJWtwh7lRHs0scx4Qz1hI2s1nAqcDh7t5gZlVA6r+1ec54pxvSSd0NYu08kvg64EufYMqXP0Hj5m0s++S1vPWXhbTsqqXygIlMuuoiRp91MjN+dQMrvvR91v7wlqjDlQ6ojmaRaHZR6lQmu6NHESx83QDg7jUAZnYE8AOgH1ADXOLu1RmMK7bqmsv3PC4tbEhZtqSwMXxPWZ/GJL03+fMfZepXr6B5dy2LTriY3a+8tue17c8u4/kLPk/zrjrGX/xvvPvrn6Hmr4vYuezl6AKWDqmOZpe+aMn2ViYjegQYZ2arzex/zexoMysGbgTOdvcjgF8A3+jORc3scjNbYmZLmho7XZwkqySPMSWPPbVnUGmwmMPOxgF9GpP0jhUXMfnqjwCw6Z4H90rAyVZ//aagfGEhY88/PVPhSTepjkpvZawl7O67wlbvPOAY4B7gv4CDgEctmPpdCHSrFRzu47gAoN+gqTk1jbSmbhi1TeVUFNcxql/HfyzFBY1UldcAsG7n+EyFJz3Q/92TKRkc/MO9I8Wkq/qNb9Lw5hZKRwyl39RJmQpPukl1NLvke3c07t4CPAE8YWb/BK4Alrv7rEzGkU1WbzuAQ4cv48ChHf+DPXXIaooKgsUdXt7a/n2nEg8F5d3oigz/vUi1qIdET3U0O0SwlWGXZKw72symmtkBSacOBVYCw8JJW5hZsZkdmKmYssHCjbMBGD9gPZMGrm23zDHj/gZAS6KAZ6o7nHAuMdDwRs2exwMP7Xhxh7KxIykdHtxXWrdeUyTiTHU0WxgUFPT+SLNMjgn3A24zsxVmtgyYBswHzga+bWYvAkuB2RmMKfYeeu3EPRM5Pjb9Z/u8PrKymtMn3w/A3zbMY1v9kIzGJ91Tt24ju9cGO+mMPvf9VE5uv2tyyleu2PN4818WZiQ26RnVUemNjCVhd3/O3We7+zR3n+7uZ7p7jbsvdff3uvsh7n6gu/80LH+Ju/82fPw+d1+SqVjjZFv9EG5ffgEAc8cu4rrZ1zFp4FoGlW5n9uhF/OjYq6korqe2qTxcPF7ibs23FwBQVFnBrEdvY9zFZ1I2diTFgwYw6MiDOfzO7zH+4n8DYMcLK3jzgcejDFc6oTqaPcys10e6acWsLHD7ivMZ3W8Tp01+kOMnPM7xE/b+R7m2qZz5C69l/dvabScbrL/9Xir2G8v+1/wHZaOGccj/Xd9uuZ3LX+Ef516lZSuzgOpoFrB43qKkJJwVjG89ew2LNs3ig/vfx9TBr1BRvJuauiqerT6Su1edy8ZdWl0pm7x83Y28cf9jTLjsHIbMPoyyMSMpKC2madtOdr60mup7H2XDHX8g0dAYdajSJaqj0jNKwlnkyQ3zeHLDvKjDkDTZ8fxyln3y2qjDkDRSHY0zrZglIiISDaNPZjf3lpKwiIjkhTi2hOP3s0BERCRPqCUsIiI5zzDM4tfuVBIWEZHcZ0AMu6OVhEVEJC/E8T7h+EUkIiKSJ9QSFhGRvBDH2dFKwiIikvuCvQyjjmIf8YtIREQkT6glLCIieUHd0SIiIlGJ4exoJWEREcl5fbUfcG/F72eBiIhInlBLWERE8oO6o0VERKKhiVkiIiJR0H3CIiIiuc/MBpnZb81slZmtNLNZHZVVS1hERPJD5rqj/wd42N3PNrMSoKKjgkrCIiKSFzKxn7CZDQDeC1wC4O6NQGNH5dUdLSIiua91P+HeHlBlZkuSjsvbfNIkYDNwi5m9YGY/M7PKjsJSEhYREem6GnefkXQsaPN6EXA48GN3PwzYDXyho4upO1pERPKAYZm5T3gDsMHdF4fPf0uKJKyWsIiI5Aez3h+dcPc3gPVmNjU8dRywoqPyagmLiIik15XAXeHM6LXApR0VVBIWEZHcZ2Rs2Up3XwrM6EpZJWEREckDXetOzjQlYRERyQsZmpjVLfGLSEREJE+oJSwiIrnPiOUGDkrCIiKSByyTa0d3mZKwiIjkPCMza0d3V/wiEhERyRNqCYuISO5r3cAhZpSERUQkD1gsJ2bFLyIREZE8oZawiIjkB62YJSIiEpEYrpilJCwiIrnPNCYsIiIiSdQSFhGR/KBblERERCISw+5oJWEREckPMZwdHb+fBSIiInlCLWEREcl9ZrpFSUREJDIx7I5WEhYRkfwQw4lZ8YtIREQkT6glLCIiuU9jwiLd976bz4o6BEmzbz4QdQSSt2I4Jhy/nwUiIiJ5Qi1hERHJDzGcmKUkLCIiecBi2R2tJCwiIrnPiOXErPhFJCIikifUEhYRkZzngKs7WkREJAqmiVkiIiKRiWESjl9EIiIieUItYRERyQsaExYREYmCaUxYREQk55nZa8DbQAvQ7O4zOiqrJCwiIvkhs93Rx7h7TWeFlIRFRCQ/xHDFLCVhERHJA5auiVlVZrYk6fkCd1/QpowDj5iZAz9p5/U9lIRFRES6ribVGG9ojrtvMrPhwKNmtsrdn2yvYPza5iIiIulmBLOje3t0gbtvCv/7FnAvMLOjskrCIiKSF9wKen10xswqzax/62PgROCljsqrO1pERPJAxvYTHgHca8FnFQG/dPeHOyqsJCwiIpIm7r4WOKSr5ZWERUQkL3SlOznTlIRFRCQ/aO1oERGRCMR07ej4RSQiIpIn1BIWEZGc52grQxERkeioO1pERERaqSUsIiJ5wVF3tIiISARM9wmLiIhEJoZJOH4RiYiI5Am1hEVEJPeZblESERGJhGtMWEREJEIxbAnH72eBiIhInlBLWERE8oK6o0VERCJhWqxDREQkKnFsCccvIhERkTyhlrCIiOQ+I3dmR5vZZ9IdiIiISN8xnIJeH+nW0ytendYoRERE8lBPu6Pj16YXERHpgJNby1Z6WqMQERHpY3GcHd1hEjazt2k/2RpQ0WcRiYiI9IGsuk/Y3ftnMhDp3LwxT3HGAfcxZfAaKot3UVNXxeLqmfxq1Tls3DUm6vCkhwrHTKZo/0MpHD4OK+8HzU0kaneS2LyB5tdW0rJxTdQhShepjkp3das72swqgTOAD7v7B/omJNmX84WZ3+W0yQ/udXZMv2rOPOCPnDzxEeYvvJZnqo+KKD7pkaJiyt57JkUTp+1zvrCsgsIhIykYMJQ6JeEsoDoaf1m6i5KZlQDvBz4MnAz8Dvi/Po5Lklw07a49lfuv647hthUXsKVuKAdVLefTh9/I6H5vcP2c6/jInxew/u1xEUcrXVJQSNkJ51M0aj880ULTy8/RvOZFEm9vxayAgoFVFE6cRkGFOqSygepodsiqiVlmdgLwIeAk4HHgDmCmu1+aodgEGFy2lQun3QnAwo1HMX/RfFonpz+9cQ6vbp/E7adcSkVxHZdP/xlfXXhdhNFKVxVPn7snAdf/9Ve0rF+95zUHWup20fLGa5HFJ12nOpodnHiOCadqm/8ZmAzMdfcL3P1+IJGZsKTVKRMfoaK4HoAFyy6j7d1h1btHcf+rpwJw9NinGFy2NdMhSneVllMyfR4ATSuf3SsBS/ZRHZXeSJWEjwD+DvzFzB41s48ChZkJS1rNGbMIgNd3jmXN9v3bLfP4+qMBKCxIMGvU4ozFJj1TPPkQrKgY9wRNLz0TdTjSS6qjWcKCMeHeHunW4RXd/QV3/093nwx8DTgMKDGzh8zs8rRHIu2aMvgVAFZseXeHZVZtnUpzIvgqpw5RqyruCscG/1Antr6J797xzgsxnDQinVMdzR4ebmfYmyPdujQ72t0XAgvN7CrgBOA8YEHao5G9VJVvpqK4DoBNu0Z3WK4pUcKWuqGMqNzMhAGvZyo86aHCocF3majZBIXFlEyfS9Hk6Vi/QYDjO7fSvG4ljS8tgoa6aIOVlFRHpbdSTcw6vM0pB2rc/c8E48XSxwaVvtNK2t4wMGXZbQ2DGVG5mQElO/s6LOmNwiKsvBIAb26i/PTLKRw8fK8iNmgYJYOGUbT/IdQ/cieJbW9FEal0gepodsm2W5S+3865IeEtS+e5+4vd+SAzawH+STBroQX4lLsv6s418k1ZUf2ex40tJSnLNoSvlxep5RRnVlK253Hxu2ZghUU0/2s5jUufILFjC1ZeSfGUwyk+5GgKKgdSdvyHqL33x9DcGGHU0hHV0eySqdnRZlYILAE2uvupqcqmWjHrmA4uPgO4EXhvN+Oqc/dDw2ucBHwTOLqb18grlrRqaGd/eaydRxJDSfcpWmERzZvWUv/4r/ec8907aXzhCbypkdKZJ1HQfwjFU4+gabkmcMWR6mj28Mwu1vFpYCUwoLOC3Y7I3ZcA/XoQVLIBwDYAM3ufmT3Q+oKZ3WRml5jZcWZ2b9L5E8zs97383KxS11y+53FpYUPKsiWFjeF7ylKWk2h5094t2sbnH2u3XNOKxXj9bgCKJryrz+OSnlEdlbbMbCzwAeBnXSnf7V2UzGwEPdtFqdzMlgJlwCjg2E7KPwbcbGbD3H0zcClwSw8+N2sljzEljz21Z1DpdgB2Nnb6w0ui1NSINzcFtyglEsHkrPYkWmjZvJGicVMoGDQsszFKl6mOZpcMdUffAFwDdGm5u1QTs25k32Q7BJhN0NTuruTu6FnA7WZ2UEeF3d3N7A7gAjO7BZgFXNROnJcDlwOUlI/oQVjxVVM3jNqmciqK6xjVr7rDcsUFjVSV1wCwbuf4TIUnPeIkdm6lcMgIaKyDREvHJVtnRheXZig26S7V0eySpmUrq8xsSdLzBe6+AMDMTgXecvfnzOx9XblYqpbwkjbPHdgCXO3uvZqu6e7PmFkVMAxoZu9u8eS+mluA+4F64Dfu3tzOtRYQ3i7Vb9DUnNvnePW2Azh0+DIOHLqywzJTh6ymqCBYzOzlrVMyFZr0UKJmU5CES8uhsAha9vlrDYCVhTuGNqbu5pRoqY5mD/e0JOEad5/RwWtzgNPN7P0EuWyAmd3p7hd0dLFUY8LHuPttScft7v6n3iZgADN7F8HqW1uAdcA0Mys1s4HAca3l3H0TsAn4CnBrbz83Gy3cOBuA8QPWM2ng2nbLHDPubwC0JAp4pvo9GYtNeqb59VUAmBVQOGxs+4UKCikcFmx917L1jUyFJj2gOiqt3P2L7j7W3ScSrKfxWKoEDKmT8PR0Bkc4JhyOC98DXOzuLe6+Hvg1sAy4C3ihzfvuAta7+4o0x5MVHnrtxD0TOT42fd9x/pGV1Zw++X4A/rZhHtvqh2Q0Pum+lg2vkHg7WD+45PBjaW+2bPHBc7DSoCXcvPalTIYn3aQ6mi0Mp6DXR7qlumKFmR1mZoe3d3T3g9y90N0PDY9D3P1PSa9d4+5T3f1Udz/T3W9Neutc4Kfd/bxcsa1+CLcvD35IzR27iOtmX8ekgWsZVLqd2aMX8aNjr6aiuJ7apvJw8XiJvUQLDYsfxj1B4cgJlJ3wYQqGjYWSMmxgFSVHnkjJ4cEdgi01G2leszTigCUV1dHs0LqLUqaWrXT3Jzq7RxhSjwmPIViwo71PdTqf3dxrZvYcsBv4XF9/VpzdvuJ8RvfbxGmTH+T4CY9z/ITH93q9tqmc+Quv1T6lWaTl9ZdpXPwwJTNPomjcFIrG7TtO2LKlmvq/3A2uzcviTnU0O8RxK8NUSXiNu/d5ok3F3Y+I8vPjw/jWs9ewaNMsPrj/fUwd/AoVxbupqavi2eojuXvVuWzcNSbqIKWbmlYspuXN1ymedhSFoyZi5f2guYnEtjdpWvsSzaufTzl7WuJEdVR6ptv3CUt0ntwwjyc3zIs6DEmjxJZqGp66t/OCkhVUR+Mtji3hVGPC3zSzaW1PmtmBZqbVA0REJIv0fjy4L5J4qiR8JsF9vG2NBf4n7ZGIiIjkmVRJ+GB3/1vbk+FWhum+fUlERKRPuVuvj3RLNSacal+u4nQHIiIi0ldab1GKm1Qt4dXh0lt7MbNTgPaXhREREYmpOI4Jp2oJfxZ4wMzOAZ4Lz80g2Eih0xuQRUREJLUOW8Luvho4GPgbMBGYADwBfISe7aIkIiISmWxrCePuDcAtZnYY8CHgWuBfwO/SHomIiEif6ZuJVb2Vaj/hKQS7QHyIYLejewBz92MyFJuIiEhaOJCI4cSsVC3hVcBTwGnuvgbAzD6bkahERETyQKrZ0WcBbwCPm9lPzew42t/MQUREJPbiOCacamLWve5+LvAugglZnwVGmNmPzezEtEciIiLSVzyei3V0ukOxu+9297vCfRHHAkuBL6Q9EhERkTzTrV2U3H0r8JPwEBERyRpxXDFLWxmKiEgeyLJblERERHJFNq4dLSIiIn1ILWEREckL6o4WERGJSCLqANqhJCwiInkhji1hjQmLiIhERC1hERHJeX217GRvKQmLiEheiGN3tJKwiIjkhTi2hDUmLCIiEhG1hEVEJPc5JDzqIPalJCwiIjlPy1aKiIjIXtQSFhGRvKDZ0SIiIhFxjQmLiIhEwUhoTFhERERaqSUsIiI5z8nMmLCZlQFPAqUEOfa37n5tR+WVhEVEJC9kaEy4ATjW3XeZWTHwtJk95O5/b6+wkrCIiOSFTNwn7O4O7AqfFodHh+lfY8IiIiJdV2VmS5KOy9sWMLNCM1sKvAU86u6LO7qYWsIiIpL70rdsZY27z0j5Ue4twKFmNgi418wOcveX2iurJCwiIjkvUxOz9vpM9+1m9gRwMtBuElZ3tIiISJqY2bCwBYyZlQPHA6s6Kq+WsIiI5IUMzY4eBdxmZoUEDd1fu/sDHRVWEhYRkbyQiRWz3H0ZcFhXyysJi4hIXojj2tEaExYREYmIWsIiIpLzHNNWhiIiIpFI333CaaUkLCIieUFjwiIiIrKHWsIiIpIXMrGBQ3cpCYuISM5zNCYsIiISmTiOCSsJS6wtfM+1UYcg6fZAu3ubi+QlJWEREckLagmLiIhEwB0SMVysQ7coiYiIREQtYRERyQvqjhYREYmIkrCIiEhE4nifsMaERUREIqKWsIiI5DwHbWUoIiISCdeYsIiISGQ0JiwiIiJ7qCUsIiI5LxgTjjqKfSkJi4hIXohjElZ3tIiISETUEhYRkbwQx4lZSsIiIpL7dIuSiIhINBxIJKKOYl8aExYREYmIWsIiIpIX1B0tIiISESVhERGRCLjHc3a0xoRFREQiopawiIjkBY9hf0IVQU8AABLSSURBVLSSsIiI5IUY5mAlYRERyQ+6T1hERCSHmdk4M3vczFaa2XIz+3Sq8moJi4hIzvPMLVvZDHzO3Z83s/7Ac2b2qLuvaK+wkrCIiOSFTNyi5O7VQHX4+G0zWwmMAZSERUREeqnKzJYkPV/g7gvaK2hmE4HDgMUdXUxJWERE8kKauqNr3H1GZ4XMrB/wO+Az7r6zo3JKwiIikhc8Q0tmmVkxQQK+y91/n6qskrCIiOS8TC1baWYG/BxY6e4/6Ky8blESERFJnznAhcCxZrY0PN7fUWG1hEVEJC9k4hYld38asK6WVxIWEZG8kIjhNkpKwiIikvOceK4drTFhERGRiKglLCIiuS9zy1Z2i5KwiIjkAScRwyys7mgREZGIqCUsIiJ5wWO4n7CSsIiI5LxgdnT8uqOVhEVEJPc5JGLYEtaYsIiISETUEhYRkbyg7mjplXljnuKMA+5jyuA1VBbvoqauisXVM/nVqnPYuGtM1OFJF5Q1rWf42w8woG4J/RuWU9L8FiUtNSSshLriCWytPJr1gz/G7tKpUYcqPaA6Gl9OZnZR6i4l4azgfGHmdzlt8oN7nR3Tr5ozD/gjJ098hPkLr+WZ6qMiik+6avjbD/DuNz67z/kCb6R/w3L6Nyxn3Naf8vLI7/D6kE9EEKH0jOpo7Hnm9hPuDiXhLHDRtLv2VO6/rjuG21ZcwJa6oRxUtZxPH34jo/u9wfVzruMjf17A+rfHRRytpNJiZbzV7xS2Vr6Pt8sOob5oNE2FQylpeYtBtX9nvy3fo7LxVd79xmepLZ5ITf9Tog5ZukB1VHpKE7NibnDZVi6cdicACzcexfxF83l1+2S2Nwzi6Y1zuOqxH1LbVEZFcR2XT/9ZxNFKZzYOvpQXxt/LuqGfZmvl+6gtnUJT0VB2l76bjYMv5e/7LaS+aDQA+23pdD9wiQHV0ezh3vsj3ZSEY+6UiY9QUVwPwIJll9F2m8rq3aO4/9VTATh67FMMLtua6RAljZoLB/HmgDMAGFD/QsTRSFeojmaPRMJ7faSbknDMzRmzCIDXd45lzfb92y3z+PqjASgsSDBr1OKMxSZ9wykGIGFlEUciXaE6mh3cPS1HuikJx9yUwa8AsGLLuzsss2rrVJoTwVc5dcjqjMQlfaMgUc+wXQ8AsKPs8Iijka5QHZXeUBKOsaryzVQU1wGwadfoDss1JUrYUjcUgAkDXs9IbJJGnqCkqZphbz/AzNeOp7LxVRJWwqvDvxp1ZNIJ1dHs4oneH+mm2dExNqh0x57H2xsGpiy7rWEwIyo3M6BkZ1+HJWlyxLrTqNr96D7nd5VMYcWom9hRfmQEUUl3qI5ml7zaytDMdrV5fomZ3dTJe75mZp9v5/xEM3sp3THGXVlR/Z7HjS0lKcs2hK+XF9X1aUzStxoKh7FuyJXsLFdXdDZQHZXeUks4xox3frV5mxmX+5bd95HE2wvjfoPRHHRHt2xhUO0iJtV8lwPfuJIJ2/6X58f9nrqS/aIOU1JQHc0uWrYyZGYTgF8Aw4DNwKXu/nqbMkeEZWqBpzMeZAzUNZfveVxa2JCybElhY/gezajNFomCd76rusIB1JXsx5sDzuTIdScxqO5ZDlt/Nosm/QNMUzfiSnU0e7jTJ7cY9VZf1u5yM1vaegDXJ712E3C7u08H7gJ+1M77bwGucvdZqT7EzC43syVmtqSpcUeqolkneYwpeeypPYNKtwOws3FAn8YkfStRUM7q4V8HoH/DcobsfjziiCQV1dHskm+LddS5+6GtBzA/6bVZwC/Dx3cAc5PfaGYDgUHu/rekMu1y9wXuPsPdZxSXpJ4YkW1q6oZR2xT80h7Vr7rDcsUFjVSV1wCwbuf4jMQmfWdH+cw9jwfUvxhhJNIZ1VHprbj0c7X9fWHtnMtLq7cdAMCBQ1d2WGbqkNUUFQRz51/eOiUjcUnfMW9OfhZZHNI1qqPZwxPe6yPdokrCi4Dzwsfn02bM1923AzvMbG5Smby0cONsAMYPWM+kgWvbLXPMuKDDoCVRwDPV78lYbNI3Bte+Ux1qNTEr9lRHs4O7k0jDkW5RJeGrgEvNbBlwIfDpdspcCtxsZs8AeTun/6HXTtwzkeNj7Sz+PrKymtMn3w/A3zbMY1v9kIzGJ91T2fByyteLWrYx5a0vA9Bc0J8tlcdmIizpBdXR7JFXLWF379fm+a3u/qnw8Wvufqy7T3f341pnRrv719z9e+Hj59z9EHefFZ4/qK9ijbNt9UO4ffkFAMwdu4jrZl/HpIFrGVS6ndmjF/GjY6+morie2qbycPF4ibPZrx7OoevPYfT2O6msX0Fxcw3FLVvpV7+c8VtuZvarR9K/YQUAq4d/nZZCTeKJO9VR6Q3dJ5wFbl9xPqP7beK0yQ9y/ITHOX7C3jNma5vKmb/wWu1TmgUKaGHE2/cx4u37OizTYmW8Mvx61g/5eAYjk95QHc0OfdGS7S0l4axgfOvZa1i0aRYf3P8+pg5+hYri3dTUVfFs9ZHcvepcNu4aE3WQ0gWLJ/yFobVPMHj305Q3vU5Jy1sUeCNNBQPZXTqVrRVHs3HwxdQXawZtdlEdjT2HGOZgJeFs8uSGeTy5YV7UYUgvbK+cy/bKucEyNZJzVEelu5SERUQk5znqjhYREYmIa+1oERGRSOTh2tEiIiJ5xcx+YWZvdXX7XSVhERHJC+7e66MLbgVO7mpM6o4WEZGcl6mJWe7+pJlN7Gp5JWEREcl9nrYkXGVmS5KeL3D3BT29mJKwiIhI19W4+4x0XUxJWERE8kDf7ILUW0rCIiKSF+K4WIdmR4uISM5zMjM72szuBp4BpprZBjP7aKryagmLiIikibt/qDvllYRFRCT3xXTFLCVhERHJCxoTFhERkT3UEhYRkTygXZREREQi4Q6eSEQdxj6UhEVEJC/EcWKWxoRFREQiopawiIjkBY0Ji4iIRME9lrcoKQmLiEjOy9R+wt2lMWEREZGIqCUsIiJ5IeG6RUlERCTzXN3RIiIikkQtYRERyXmOZkeLiIhERvcJi4iIRMEhEcO1ozUmLCIiEhG1hEVEJC9oTFhERCQCjuO6T1hERCQCuk9YREREkqklLCIieSGOLWElYRERyQOutaNFRESi4BoTFhERkWRqCYuISF7wGK6YpSQsIiK5T93RIiIikkwtYRERyQNaMUtERCQSDiRi2B2tJCwiIrnP4zkxS2PCIiIiEVFLWERE8oBrdrSIiEhU3BO9PjpjZieb2ctmtsbMvtBZebWERUQk92XgPmEzKwRuBk4ANgD/MLP73H1FR+9RS1hERCQ9ZgJr3H2tuzcCvwI+mOoNagmLiEjOczwTs6PHAOuTnm8A3pPqDeYev4HqnjKzzcC6qOPIgCqgJuogJK30neaefPlOJ7j7sKiD6IyZPUzwnfRWGVCf9HyBuy8IP+PfgZPc/bLw+YXATHe/sqOL5VRLOBv+IqSDmS1x9xlRxyHpo+809+g7jRd3PzkDH7MBGJf0fCywKdUbNCYsIiKSHv8ADjCz/cysBDgPuC/VG3KqJSwiIhIVd282s08BfwYKgV+4+/JU71ESzk4Log5A0k7fae7Rd5qH3P1B4MGuls+piVkiIiLZRGPCIiIiEVESFhERiYiScJYxM4s6BhHpmJkNijoGyR5KwlnEzI4ELjKz8qhjkfQzM02UzHJmNgZYaGbHRh2LZAcl4exSCXwKOMvMyqIORtLHzKYAPzaz0qhjkZ4xM3P3jcB3ge+a2VFRxyTxpyScBczsYDO70N2fAD4HXAaco0Sc/ZKGF0qABMG9hZJlwgTceqvJawTL5y4ws9nRRSXZQEk4OxwM/JuZfdjdnwS+BnwEJeJcMCD878vACODaCGORHmpNwOFCDd8g2D3nMeD/zOy9UcYm8aYkHGOtrSR3/yXwG+ADZnZB2CL+GkEiPltjxNnJzMYCt5vZR929iWCoodLMJkQcmnSRmU01s1OSTh0AfNXdfw1cDfwf8EMzmxtJgBJ7mggSU226t3D3u81sJ3ChmeHud5rZfOBHQBNwT1SxSveZ2XiCbc9+AHzezKYTtITLgXcB69r+HZB4MbNi4CxgTPhVPUzw/V0APObuCTN7DPgQ8C0zO8Hd6yIMWWJIK2bFnJn9BzCeYOusm4G5BIuCP+juvzSzOcAGd8+HLRyznpkVAAOBbxHsO/p9wIBBBOP9xwNvA2e7+xtRxSldY2YjgYuAUQQ/hFcSLFm42N2vNrNzgYOAm9z9zegilbhSEo4ZM6tw99rw8VXA6cD1wA3A79z9G+GelRcBd4TdXhJzbVu14S0s/w6sBe519zXh+QOBjwE/d/cXIwlWUmrnuxxGMDQ0jmAs+BXgdwRb2B1M8IMq5SL+kr80JhwjZvZ+4L/NbJyZFRJU6pOAGcAbBLc9lLj7b4CfAAuji1a6w93dzA4xsxvD548BdxOMIZ5rZpPC88sJ9iA9MbJgpUPJCdjMTjOzk4Gp7v5tghnR5wLj3X0ucAkwVwlYUlESjgkzOxX4JvCEu68nuF1lLPAEQRf0B929EfiImZ3u7g+E9yRKTJnZZDM708zOCE81AUPM7IfhP+ZPAn8CPg6caWaDzKySoGu6y7uwSOaZ2ScJeqjmAj81sy+7+3cJbk/6uJkd5+617r4lyjgl/pSEYyAcV/occJm7/8HMysJf27cSjDXd6e5NZnYJ8GlAv6xjLlx844/AHOAaM/uIu68guH1lIMHwAsCLwAvAw+6+3d13A6eo9RQvZra/mQ0MezSGEwwlfNjdvwLMJvhxfAnwM+Al4J/RRSvZRLOj46GBoJVUH973+wUzO5pggs5Wgpv+TwEOBc5y91ejC1U6Y2bTgLuAL7r7/WZ2ATDAzA509+Vm9h3gG2b2DEGr9zPu/lJSV2djhOFLG2Y2GLgCaDSzb7r7W2a2hfB7cvdtZvZZYI6732pmP3L3lihjluyhiVkxEN4PfDXBOOCBwF+Ap4EVwBnAauBeoMDdN0cVp3RNeE/ok+5eED5fBmwERgMvuPsl4fkPABvdfWlUsUrHWn8UhfXzZIIWbwtwHfDfwAnAUe7ebGZXAkcRTJhM6NYy6Sq1hGMgrOg/ARYRTMb6o7s3AJjZ5cAyjS1lD3d/2sw+YGZrCWY//9bdrzezEuCfZvYVd/8vd/9TxKFKaoVAM0Fj5SEzGwBcA+x29y+aWX/gyfBH1nuA89UClu5SSzjGwluRvgCcoy7o7GNmxwF/BkrcPRGe+ygwyN2/H2lwkpKZVQFLgJlh9/NoglXrXgR2Advc/ZtmdjjBGP9r7v6v6CKWbKWJWTFkZqPM7DMES1NerAScndz9rwT3ea+GYHIP8P/QpJ3Yc/ca4ErgMTM7CLgD+KW7f5Jg5vpwM/s2sMbdH1cClp5Sd3Q8bSe44f+DrYs4SHZy9wfNLGFmtcC/CCZhPRJ1XNK5cFJdE7AM+JK73xy+9BRQCswL/yvSY+qOFsmAsGt6gLvfG3Us0j1mdgJwI/Aed9+RdH7P6nYiPaUkLJJB2pQhO4W3CN4AzHL3rVHHI7lD3dEiGaQEnJ3C2dElwF/MbEZwSt+l9J5awiIiXWRm/dx9V9RxSO5QEhYREYmIblESERGJiJKwiIhIRJSERUREIqIkLCIiEhHdoiTSATNrIVhisghYSbCEaG2b8/8CLnT37WY2MSz3ctJlfuDut5vZawRbU0KwMcDvga+7e0P4vgfc/aDwc2cC3wNGAE6wo9YLwH+E758WfkYL8DCwCvguwU5NrT4M1IbxrALKws+/2d1v6+UfjYikiWZHi3TAzHa5e7/w8V3Ac+7+gzbnbwNWu/s32ibTNtd6DZjh7jVm1g9YADS5+8XJ7zOzEcCzwHnu/ky4jd5ZwFPu/mbba4XPLwmff6rNZ+4Vj5lNIkj+/+Put6Tpj0lEekHd0SJd8xSwfzvnnwHGdOdC4X2mHwfOMLMhbV6+ArjN3Z8Jy7q7/7Y1AfeGu68l2Lf6qt5eS0TSQ0lYpBNmVgScQpvdj8ysEDgOuC/p9GQzW5p0zGvvmu6+k6Ar+4A2Lx0EPNeDMM9t87nlHZR7HnhXD64vIn1AY8IiHSs3s6Xh46eAn7c5P5EgYT6a9J5X3f3QLl7f0hJl4J52uqP7+jNFpJfUEhbpWJ27HxoeV7p7Y/J5YAJQQtCF3C1m1p8gia9u89Jy4IhexNyZwwgma4lIDCgJi/RQuK3dVcDnzay4q+8LJ2b9L/AHd9/W5uWbgIvN7D1J5S8ws5G9jTecqPU9gm35RCQG1B0t0gvu/oKZvQicR9BlPTmpCxvgF+7+o/Dx4+Fs5wLgXuDr7VzvTTM7D/iemQ0HEsCTBLOaUznXzOYmPf8ksCmM5wXeuUXpRs2MFokP3aIkIiISEXVHi4iIRERJWEREJCJKwiIiIhFREhYREYmIkrCIiEhElIRFREQioiQsIiISkf8PCUKlMWGlNGkAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 864x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_confusion_matrix(y_test, s_pred, title=\"Confusion Matrix\")\n",
    "np.set_printoptions(precision=1)\n",
    "# Plot non-normalized confusion matrix\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
